package com.example.learn_spring_boot3.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils {
    // 7天到期
    // private static long expire = 1000 * 60 * 60 * 24 * 7;
    private static long expire = 1000 * 60 * 60 * 24;
    // 32位秘钥
    private static String secret = "abcdefghiabcdefghiabcdefghiabcde";

    // 生成token
    public static String generateToken(Map<String, Object> additionalClaims) {
        // 签发时间
        Date now = new Date();
        // 到期时间
        Date expiration = new Date(now.getTime() + expire);

        // 设置载荷
        HashMap<String, Object> claims = new HashMap<>();
        claims.putAll(additionalClaims);

        return Jwts.builder()
                .setHeaderParam("Type", "JWT") // 设置头(固定的)
                // .setSubject(username) // 设置载荷(只能设置单个值)
                .setClaims(claims) // 设置载荷(可以设置多个)
                .setIssuedAt(now) // 设置签发时间
                .setExpiration(expiration) // 设置过期时间
                .signWith(SignatureAlgorithm.HS512, secret) // 设置加密
                .compact(); // 合成
    }

    // 解析token
    public static Claims getClaimsFromToken(String token) {
        return Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
    }
}
